var U = {};
var app_path = document.location.pathname.substr(0, document.location.pathname.substr(1).indexOf("/") + 1);
app_path = app_path === '/SSM' ? app_path : '';
/** 引入常用JS和CSS */
document.write("<script language='javascript' src='" + app_path + "/js/jquery.js'></script>");
document.write("<script language='javascript' src='" + app_path + "/js/core.js'></script>");
document.write("<script language='javascript' src='" + app_path + "/js/jquery.timer.js'></script>");
document.write("<script language='javascript' src='" + app_path + "/front/layer/layer.js'></script>");

/**
 * Ajax请求封装
 * 
 * @auther chensi
 * @version 2015-5-26 上午11:23:37
 */
function ajaxCall(url, data, callback, async) {
	$.ajax({
		async : async == false ? false : true,
		url : app_path + '/' + url,
		data : data,
		type : "POST",
		dataType : "json",
		success : function(_resp) {
			if (U.isEmpty(_resp)) {
				U.showExceptionDialog();
				return;
			}
			if (U.checkExceptionAndPermission(_resp)) {
				if (callback) {
					callback(_resp);
				}
			}
		},
		error : function(_xhr, _errormsg, _e) {
			if (_xhr.status === 0 || _xhr.status === 503) {
				console.log(_errormsg, _e);
				U.alert("网络异常, 请检查网络是否通畅!");
			} else {
				U.showExceptionDialog();
			}
		}
	});
}

/**
 * 异步提交表单
 * 
 * @param $dom
 *            表单
 * @param url
 *            提交地址
 * @param callback
 *            回调函数
 * @param isShowNotice
 *            是否直接弹出提示(设置为false时, 不弹出提示)
 * @auther chensi
 * @version 2015-6-25 下午11:22:45
 */
function ajaxSubmit($dom, url, callback, isShowNotice) {
	$dom.ajaxSubmit({
		type : "post",
		url : app_path + '/' + url,
		success : function(_resp) {
			if (U.isEmpty(_resp)) {
				U.showExceptionDialog();
				return;
			}
			if (U.checkExceptionAndPermission(_resp, isShowNotice)) {
				if (callback) {
					callback(_resp);
				}
			}
		},
		error : function(xhr, _errormsg, _e) {
			if (xhr.status === 0 || xhr.status === 503) {
				U.alert("网络异常, 请检查网络是否通畅!");
			} else {
				U.showExceptionDialog();
			}
		}
	});
}

/**
 * 根据请求地址获取HTML信息
 * 
 * @param url
 * @param data
 * @param callback
 * @param async
 */
function loadHtml(url, data, callback, async) {
	$.ajax({
		async : async == false ? false : true,
		url : app_path + '/' + url,
		data : data,
		type : "POST",
		dataType : "text",
		success : function(data, flag, xhr) {
			var response = xhr.responseText;
			// 如果load的页面是登录页面，直接返回到登录页面
			if (xhr.responseText.indexOf('<html pageIdentity="login">') != -1) {
				window.location = app_path + '/user/login';
				return;
			}
			if (callback) {
				callback(data);
			}
		},
		error : function(xhr, _errormsg, _e) {
			if (xhr.status === 0 || xhr.status === 503) {
				U.alert("网络异常, 请检查网络是否通畅!");
			} else {
				if (xhr.status == 404) {
					U.alert("加载失败, 未找到该地址: " + url);
					return;
				}
				U.showExceptionDialog();
			}
		}
	});
}

/**
 * 检查请求是否出现异常或权限问题
 * 
 * @param _resp
 *            返回数据
 * @param isShowNotice
 *            是否直接弹出提示(设置为false时, 不弹出提示)
 * @auther chensi
 * @version 2015-6-25 下午11:22:45
 */
U.checkExceptionAndPermission = function(_resp, isShowNotice) {
	if (_resp.status == '000001') { // 请求出错
		U.alert(_resp.message);
		return false;
	}
	if (_resp.status == '000002') { // 警告提示，并允许回调
		// 是否弹出提示框
		if (isShowNotice) {
			U.alert(_resp.message);
		}
		return true;
	}
	if (_resp.status == '000003') { // 无权限
		U.confirm("您暂无权限,请重新登录", function() {
			window.location = app_path + '/user/login';
		});
		return false;
	}
	if (_resp.status == '000004') { // 重定向
		window.location = app_path + _resp.data;
		return false;
	}
	return true;
}

/**
 * 显示出错提示
 * 
 * @auther chensi
 * @version 2015-6-26 上午8:42:19
 */
U.showExceptionDialog = function(_resp) {
	var errMsg = "系统繁忙, 请稍后再试.";
	if (!U.isEmpty(_resp) && !U.isEmpty(_resp.message)) {
		errMsg += "<br>错误信息: " + _resp.message;
	}
	U.alert(errMsg);
}

/**
 * 加载层
 * 
 * @auther chensi
 * @version 2015-6-1 下午4:48:17
 */
U.loading = function() {
	return layer.load(2, {
		shade : [ 0.1, '#fff' ]
	// 0.1透明度的白色背景
	});
}

/**
 * 半透明黑色提示，过几秒消失
 */
U.msg = function(message, time) {
	return layer.msg(message, {
		time : time || 2000
	});
}

/**
 * 提示框
 * 
 * @param 需提示的文本
 */
U.alert = function(message, callback) {
	var alertIndex = layer.alert(message, {
		title : "温馨提示"
	}, function() {
		layer.close(alertIndex);
		if (callback) {
			callback();
		}
	});
}

/**
 * 显示确认提示框
 * 
 * @param message
 *            提示消息
 * @param callback
 *            点击确认后回调
 * @auther chensi
 * @version 2015-6-1 下午4:48:06
 */
U.confirm = function(message, callback) {
	var confirm_index = layer.confirm(message, {
		btn : [ '确认', '取消' ],
		shadeClose : false
	}, function() {
		layer.close(confirm_index);
		if (callback) {
			callback();
		}
	}, function() {
		layer.close(confirm_index);
	});
};

/**
 * 显示选择提示框
 * 
 * @param message
 *            提示消息
 * @param btn1
 *            第一个按钮文本
 * @param btn2
 *            第二个按钮文本
 * @param callback1
 *            第一个按钮点击后的回调
 * @param callback2
 *            第二个按钮点击后的回调
 */
U.choose = function(message, btn1, btn2, callback1, callback2) {
	var confirm_index = layer.confirm(message, {
		btn : [ btn1, btn2 ],
		shadeClose : false
	}, function() {
		layer.close(confirm_index);
		if (callback1) {
			callback1();
		}
	}, function() {
		layer.close(confirm_index);
		if (callback2) {
			callback2();
		}
	});
}

/**
 * Cookie操作 - 设置值
 */
U.setCookie = function(name, value, expire) {
	var exp = new Date();
	exp.setTime(exp.getTime() + expire * 24 * 60 * 60 * 1000);
	document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString();
};

/**
 * Cookie操作 - 获取值
 */
U.getCookie = function(key) {
	var cookies = document.cookie ? document.cookie.split('; ') : [];
	for ( var i = 0, l = cookies.length; i < l; i++) {
		var parts = cookies[i].split('=');
		var name = parts.shift();
		var cookie = parts.join('=');
		if (key && key === name) {
			return cookie;
		}
	}
};

/**
 * 创建并初始化下拉框
 * 
 * @param options
 *            配置信息
 */
U.initSelect = function(options) {
	options.idField = options.idField || "id";
	options.nameField = options.nameField || "name";
	options.appendData = options.appendData === false ? false : true;
	options.data = options.data || {};
	ajaxCall(options.url, options.data, function(_resp) {
		var data = _resp.data;
		var html = "<option value=''>请选择</option>";
		if (options.appendData) {
			$.each(data, function(key, val) {
				var id = eval("val." + options.idField);
				var name = eval("val." + options.nameField);
				html += "<option value='" + id + "'>" + name + "</option>";
			});
			options.$dom.html(html);
		}
		if (options.callback) {
			options.callback(data);
		}
	});
}

/**
 * 弹出窗口封装
 */
U.showDialog = function(options) {
	var index;
	options = options || {};
	options.title = options.title || '信息框';
	options.width = options.width || '630px';
	options.type = options.type || 1;
	if (options.height) {
		options.area = [ options.width, options.height ];
	} else {
		options.area = options.width;
	}
	loadHtml(options.url, options.params, function(data) {
		index = layer.open({
			type : options.type,
			title : options.title,
			area : options.area,
			shade : 0.5,
			content : data,
			btn : null,
			success : options.success,
			end : options.end
		});
	}, false);
	return index;
}